/*
 * Copyright 2016 Wealth Inc. All rights reserved.
 */
package com.wealth.bbs.web.controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.wealth.bbs.entity.Board;
import com.wealth.bbs.entity.Topic;
import com.wealth.bbs.entity.TopicPic;
import com.wealth.bbs.enums.TopicEssenceEnum;
import com.wealth.bbs.service.IBoardService;
import com.wealth.bbs.service.ITopicService;
import com.wealth.member.entity.Membership;
import com.wealth.member.service.IMembershipService;
import com.wealth.system.service.ShiroUser;
import com.wealth.system.web.controller.BaseController;

import iaas.utils.RedirectMessage;
import iaas.web.JqGridRequest;
import iaas.web.JqGridResponse;
import iaas.web.JqGridUtil;

/**
 * @author zhu
 * @version 1.0
 * @since 1.0
 */

@Controller
@RequestMapping(value = "/manage/bbs/topic")
public class TopicController extends BaseController {

	Logger logger = Logger.getLogger(TopicController.class);

	@Autowired
	private ITopicService topicService;
	@Autowired
	private IBoardService boardService;
	@Autowired
	private IMembershipService membershipService;

	/**
	 * 所有RequestMapping方法调用前的Model准备方法, 实现Struts2
	 * Preparable二次部分绑定的效果,先根据form的id从数据库查出Classify对象,再把Form提交的内容绑定到该对象上。
	 * 因为仅update()方法的form中有id属性，因此仅在update时实际执行.
	 */
	@ModelAttribute
	public void init(@RequestParam(value = "id", defaultValue = "-1") Long id,Model model) {
		try {
			if (id != -1) {
				Topic topic = topicService.get(id);
				model.addAttribute("topic", topic);
			}
		} catch (Exception e) {
			logger.error("初始化错误", e);
			
		}
	}
	
	/**
	 * 列表
	 */
	@RequestMapping(value="/list",method = RequestMethod.GET)
	public String list(Model model){
		Long corpid = ShiroUser.getInstance().getUser().getCorp().getId();
		model.addAttribute("corpid", corpid);
		return "bbs/topic/list";
	}
	
	/**
	 * 列表ajax查询数据
	 */
	@RequestMapping(value="/list",method = RequestMethod.POST)
	@ResponseBody
	public JqGridResponse getJson(Model model,JqGridRequest request) {
		try{

			Long corpid = ShiroUser.getInstance().getUser().getCorp().getId();
			
			Page<Topic> page = topicService.get(corpid, request,Topic.class);
			
			return JqGridUtil.getJqGrirdResponse(page);
		}catch(Exception e){
			logger.error("列表错误！", e);
			return null;
		}
	}

	
	/**
	 * 创建页面
	 */
	@RequestMapping(value="/create",method = RequestMethod.GET)
	public String createForm(Model model){
		try {
			Long corpid = ShiroUser.getInstance().getUser().getCorp().getId();
			
			List<Board> boardList = boardService.getAll();
			model.addAttribute("boardList", boardList);
			
			List<Membership> memberShipList = membershipService.getMemberShipByCorpId(corpid);
			model.addAttribute("memberShipList",memberShipList);
			return "bbs/topic/create";
		} catch (Exception e) {
			logger.error("创建页面错误", e);
			return "system/500";
		}
	}
	
	/**
	 * 创建
	 */
	@RequestMapping(value="/create",method = RequestMethod.POST)
	public String create(Model model,Topic topic,RedirectAttributes redirectAttributes, HttpServletRequest request){
		try {
			String[] picurls = request.getParameterValues("picList");
			if(picurls!=null){
				for (String str : picurls) {
					TopicPic pic = new TopicPic();
					pic.setPicurl(str);
					topic.getTopicPicList().add(pic);
				}
			}
			
			topicService.saveTopic(topic);
			redirectAttributes.addFlashAttribute("message", RedirectMessage.setShowTipSuccess("创建成功"));
			return "redirect:/manage/bbs/topic/list";
		} catch (Exception e) {
			logger.error("创建错误", e);
			return "system/500";
		}
	}
	
	/**
	 * 编辑页面
	 */
	@RequestMapping(value="update/{id}",method = RequestMethod.GET)
	public String updateForm(Model model,@PathVariable("id") Long id){
		try{
			Long corpid = ShiroUser.getInstance().getUser().getCorp().getId();
			
			Topic topic = topicService.get(id);
			model.addAttribute("topic", topic);
			
			List<Board> boardList = boardService.getAll();
			model.addAttribute("boardList", boardList);
			
			List<Membership> memberShipList = membershipService.getMemberShipByCorpId(corpid);
			model.addAttribute("memberShipList",memberShipList);
			
			return "bbs/topic/update";
		}catch(Exception e){
			logger.error("编辑页面错误,id="+id, e);
			return "system/500";
		}
	}
	
	/**
	 * 编辑
	 */
	@RequestMapping(value="update/{id}",method = RequestMethod.POST)
	public String update(Model model,@PathVariable("id") Long id
			,@ModelAttribute("topic") Topic topic,RedirectAttributes redirectAttributes,HttpServletRequest request){
		try{
			
			topicService.clear();
			
			String[] picurls = request.getParameterValues("picList");
			if(picurls!=null){
				for (String str : picurls) {
					TopicPic pic = new TopicPic();
					pic.setPicurl(str);
					topic.getTopicPicList().add(pic);
				}
			}
			
			topicService.updateTopic(topic);
			redirectAttributes.addFlashAttribute("message", RedirectMessage.setShowTipSuccess("编辑成功"));
			return "redirect:/manage/bbs/topic/list";
		}catch(Exception e){
			logger.error("编辑错误,id="+id, e);
			return "system/500";
		}
	}
	
	

	

	

	
	/**
	 * 删除（逻辑删除）
	 */
	@RequestMapping(value="/delete/{id}",method = RequestMethod.GET)
	public String delete(@PathVariable Long id,RedirectAttributes redirectAttributes){
		try{
			topicService.deleteLogical(id);
			redirectAttributes.addFlashAttribute("message", RedirectMessage.setShowTipSuccess("删除成功"));
			return "redirect:/manage/bbs/topic/list";
		}catch(Exception e){
			logger.error("删除错误,id="+id,e);
			return "system/500";
		}
	}
	
	/**
	 * 恢复
	 */
	@RequestMapping(value="/disable/{id}",method = RequestMethod.GET)
	public String disable(@PathVariable Long id,RedirectAttributes redirectAttributes){
		try{

			

			Topic topic = topicService.get(id);
			topic.setIsRecommend(TopicEssenceEnum.NORMAL.getValue());
			topicService.save(topic);
			redirectAttributes.addFlashAttribute("message", RedirectMessage.setShowTipWarning("恢复成功"));
			//topicService.updateStatus(id, TopicEssenceEnum.UP.getValue());
			return "redirect:/manage/bbs/topic/list";
		}catch(Exception e){
			logger.error("停用错误,id="+id,e);
			return "system/500";
		}
	}
		
	/**
	 * 加精
	 */
	@RequestMapping(value="/enable/{id}",method = RequestMethod.GET)
	public String enable(@PathVariable Long id,RedirectAttributes redirectAttributes){
		try{
			Topic topic = topicService.get(id);
			topic.setRecommendTime(new Date());
			topic.setIsRecommend(TopicEssenceEnum.UP.getValue());
			topicService.save(topic);
			
			
			
			redirectAttributes.addFlashAttribute("message", RedirectMessage.setShowTipWarning("加精成功"));
			return "redirect:/manage/bbs/topic/list";
		}catch(Exception e){
			logger.error("启用错误,id="+id,e);
			return "system/500";
		}
	}

}
